<template>
  <BasicContainer>
    <FyCurd
      ref="crud"
      :page.sync="page"
      :data="tableData"
      :permission="permissionList"
      :table-loading="tableLoading"
      :option="tableSalaryOption"
      @on-load="getList"
      @search-change="searchChange"
      @refresh-change="refreshChange"
      @size-change="sizeChange"
      @current-change="currentChange"
      @row-update="handleUpdate"
      @row-save="handleSave"
      @row-del="handleDel">
      <template #menuLeft> </template>
      <template #menu> </template>
      <template #sendSmsStatus="scope">
        <ElTag v-if="scope.row.sendSmsStatus === '0'">未发送</ElTag>
        <ElTag v-if="scope.row.sendSmsStatus === '1'" type="success">以发送</ElTag>
      </template>
      <template #sendSmsCount="scope">
        <ElTag v-if="scope.row.sendSmsCount === 0">{{ scope.row.sendSmsCount }}</ElTag>
        <ElTag v-if="scope.row.sendSmsCount > 0" type="success">{{ scope.row.sendSmsCount }}</ElTag>
      </template>
    </FyCurd>
  </BasicContainer>
</template>

<script>
  import { fetchList, addObj, putObj, delObj, getAllTableHead, sendMassSms, sendSms } from '@/api/personnel/salary'
  import { tableOption } from '@/const/crud/personnel/salary'
  import { mapState } from 'vuex'
  import { services } from '@/config'

  export default {
    name: 'Fypersonnelsalary',
    data() {
      return {
        searchForm: {},
        tableData: [],
        page: {
          total: 0, // 总页数
          currentPage: 1, // 当前页数
          pageSize: 20 // 每页显示多少条
        },
        tableLoading: false,
        tableSalaryOption: tableOption,
        fieldSize: 7 // 固定的表头字段是7个
      }
    },
    computed: {
      ...mapState('user', ['permissions', 'sysUser', 'userInfoDetail']),
      permissionList() {
        return {
          addBtn: this.$isEmpty(this.permissions.personnel_salary_add, false),
          delBtn: this.$isEmpty(this.permissions.personnel_salary_del, false),
          editBtn: this.$isEmpty(this.permissions.personnel_salary_edit, false)
        }
      }
    },
    created() {
      this.initTableHead()
    },
    methods: {
      initTableHead() {
        this.tableSalaryOption.menu = false
        this.tableSalaryOption.column[3].search = false
        this.tableSalaryOption.column[4].search = false
        getAllTableHead()
          .then(res => {
            const head = res.data.data
            if (head != null) {
              const colLen = this.tableSalaryOption.column.length
              for (let i = this.fieldSize; i < colLen; i++) {
                this.tableSalaryOption.column.pop()
              }
              for (let i = 0; i < head.length; i++) {
                const col = {}
                col.type = 'input'
                col.label = head[i].columnname
                col.prop = head[i].fieldname.toLowerCase()
                col.span = 12
                this.tableSalaryOption.column.push(col)
              }
            }
          })
          .catch(() => {
            this.$message.success('加载表头数据失败')
          })
      },
      // 列表查询
      getList(page, params) {
        if (this.userInfoDetail === null || this.userInfoDetail === undefined) {
          this.searchForm.userNumber = '00000'
        } else {
          this.searchForm.userNumber = this.userInfoDetail.personNumber
        }
        if (this.$isBlank(this.searchForm.userNumber)) {
          this.searchForm.userNumber = '00000'
        }
        this.tableLoading = true
        fetchList(
          Object.assign(
            {
              current: page.currentPage,
              size: page.pageSize
            },
            params,
            this.searchForm
          )
        )
          .then(response => {
            this.tableData = response.data.data.records
            this.page.total = response.data.data.total
            this.tableLoading = false
          })
          .catch(() => {
            this.tableLoading = false
          })
      },
      // 删除
      handleDel: function (row, index) {
        this.$confirm(`是否确认删除ID为${row.id}`, '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        })
          .then(() => {
            return delObj(row.id)
          })
          .then(data => {
            this.$message.success('删除成功')
            this.getList(this.page)
          })
      },
      // 更新
      handleUpdate: function (row, index, done, loading) {
        putObj(row)
          .then(data => {
            this.$message.success('修改成功')
            done()
            this.getList(this.page)
          })
          .catch(() => {
            loading()
          })
      },
      // 保存
      handleSave: function (row, done, loading) {
        addObj(row)
          .then(data => {
            this.$message.success('添加成功')
            done()
            this.getList(this.page)
          })
          .catch(() => {
            loading()
          })
      },
      // 每页条数改变事件
      sizeChange(pageSize) {
        this.page.pageSize = pageSize
      },
      // 当前页发生改变事件
      currentChange(current) {
        this.page.currentPage = current
      },
      // 查询事件
      searchChange(form, done) {
        this.searchForm = form
        this.page.currentPage = 1
        this.getList(this.page, form)
        done()
      },
      // 刷新事件
      refreshChange() {
        this.getList(this.page)
      },
      //  导出excel
      exportExcel() {
        this.$downBlobFile(`${services.personnelService}salary/export`, this.searchForm, 'fypersonnelsalary.xlsx')
      },
      // 群发短信
      massSMS() {
        if (this.searchForm === null || this.searchForm.year === undefined || this.searchForm.month === undefined) {
          this.$message.success('请先查询所属年月的数据')
        } else {
          this.$confirm(`确认发送${this.page.total}条短信工资短信`, '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          })
            .then(() => {
              sendMassSms(this.searchForm.year, this.searchForm.month)
            })
            .then(data => {
              this.$message.success(data.msg)
            })
        }
      },
      // 单条发送短信
      sendSms(row, index) {
        this.$confirm(`确认给${row.userName}发送短信工资短信`, '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        })
          .then(() => {
            sendSms(row.userNumber)
          })
          .then(data => {
            this.$message.success(data.msg)
          })
      }
    }
  }
</script>
